package com.woniuxy.shop.util;

import cn.hutool.core.lang.UUID;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.concurrent.TimeUnit;

/**
 * @ClassName SimpleRedisLock
 * @Description
 * @Author ll
 * @Date 2022/10/28 15:19
 * @Version 1.0
 **/
public class SimpleRedisLock implements ILOCK{
    private String name;
    private StringRedisTemplate stringRedisTemplate;

    private static final String Key_proxy="lock";
    private static final String id_prefix= UUID.randomUUID().toString(true)+"-";


    public SimpleRedisLock(String name,StringRedisTemplate stringRedisTemplate){
        this.name=name;
        this.stringRedisTemplate=stringRedisTemplate;
    }
    //尝试获取锁
    @Override
    public boolean tryLock(long timeoutSec) {
        //获取线程id或者标识
        String id =id_prefix+ Thread.currentThread().getId();
        //获取锁
        Boolean aBoolean = stringRedisTemplate.opsForValue().setIfAbsent(Key_proxy + name, id, timeoutSec, TimeUnit.SECONDS);
        return Boolean.TRUE.equals(aBoolean);
    }
    //删除锁


    //不能够保证查询用户标识跟删除锁的一致性，因此放弃使用，改使用lua脚本实现
//    @Override
//    public void unlock() {
//        //获取线程标识
//        String id =id_prefix+ Thread.currentThread().getId();
//        //取出锁的标识
//        String s = stringRedisTemplate.opsForValue().get(Key_proxy + name);
//        //比较是否一直，如果一致则删除，不一致不做操作
//        if(id.equals(s)){
//            stringRedisTemplate.delete(Key_proxy + name);
//        }
//
//    }


    //给予lua脚本实现释放锁
    @Override
    public void unlock() {
    //调用lua脚本

    }
}